package banksimulator.bank;

import java.util.EventObject;

/**
 * <p>银行变动事件，封装了被添加或删除的帐户的ID以及变动的类型。
 * <p>实现BankChangeListener接口的对象在所监听的银行银行发生了添加或删除帐户的事件时能获取此BankChangeEvent。
 * @author Rajab
 */
public class BankChangeEvent extends EventObject {

    /**
     *用于描述银行内存储帐户变动情况的类型
     */
    public enum ChangeType {

        /** 添加帐户 */  ADD,
        /** 删除帐户 */  REMOVE;

        /**
         * 返回该对象的字符串表示。
         * @return 该对象的字符串表示形式
         */
        @Override
        public String toString() {
            String ret = null;
            switch (this) {
                case ADD:
                    ret = "被添加";
                    break;
                case REMOVE:
                    ret = "被删除";
                    break;
            }
            return ret;
        }
    }
    //发生变动的帐户ID
    private String accountID;
    //变动类型
    private ChangeType type;

    /**
     * 构造一个新的BankChangeEvent。
     * @param source 此事件的发生源（某一银行）
     * @param accountID 发生变动的帐户ID
     * @param type 变动类型
     */
    public BankChangeEvent(Object source, String accountID, ChangeType type) {
        super(source);
        this.accountID = accountID;
        this.type = type;
    }

    /**
     * 返回该对象的字符串表示。
     * @return 该对象的字符串表示形式
     */
    @Override
    public String toString() {
        return String.format("%s %s", accountID, type);
    }

    /**
     * 获取变动类型。
     * @return 变动类型
     */
    public ChangeType getType() {
        return type;
    }

    /**
     * 获取发生变动的帐户ID。
     * @return 帐户ID
     */
    public String getAccountID() {
        return accountID;
    }
}
